package com.ssy.lingxi.settle.accounts.service;

import com.ssy.lingxi.common.model.dto.UserLoginCacheDTO;
import com.ssy.lingxi.common.response.PageData;
import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.settle.accounts.model.bo.PayProveBO;
import com.ssy.lingxi.settle.accounts.model.vo.request.*;
import com.ssy.lingxi.settle.accounts.model.vo.response.CommunicationPayProveVO;
import com.ssy.lingxi.settle.accounts.model.vo.response.PagePlatformScoreSettlementDetailVO;
import com.ssy.lingxi.settle.accounts.model.vo.response.PlatformScoreSettlementDetailVO;
import com.ssy.lingxi.settle.accounts.model.vo.response.PlatformScoreSettlementVO;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * 平台积分结算接口
 * @author 伍将
 * @date 2020/10/29
 * @version 2.0.0
 */
public interface IPlatformScoreSettlementService {

    /**
     * 分页查询应收账款结算
     * @author 伍将
     * @date 2020/10/29
     * @param sysUser 登录用户
     * @param pageVO 查询请求
     * @return com.ssy.lingxi.common.response.Wrapper<com.ssy.lingxi.common.response.PageData < com.ssy.lingxi.settle.accounts.mode.vo.response.PlatformScoreSettlementVO>>
     **/
    Wrapper<PageData<PlatformScoreSettlementVO>> pageReceivableSettlement(UserLoginCacheDTO sysUser, PlatformScoreSettlementPageVO pageVO);

    /**
     * 确认对账完成
     * @author 伍将
     * @date 2020/10/29
     * @param sysUser:
     * @param completeVO:
     * @return com.ssy.lingxi.common.response.Wrapper
     **/
    Wrapper<Void> confirmAccountComplete(UserLoginCacheDTO sysUser, ConfirmAccountCompleteVO completeVO);

    /**
     * 确认付款凭证
     * @author 伍将
     * @date 2020/10/29
     * @param sysUser:
     * @param confirmVO:
     * @return com.ssy.lingxi.common.response.Wrapper
     **/
    Wrapper<Void> confirmPayProve(UserLoginCacheDTO sysUser, ConfirmPayProve confirmVO);

    /**
     * 收款方查看凭证
     * @author 伍将
     * @date 2020/10/29
     * @param sysUser:
     * @param id:
     * @return com.ssy.lingxi.common.response.Wrapper<java.util.List < com.ssy.lingxi.settle.accounts.mode.bo.PayProveBO>>
     **/
    Wrapper<List<PayProveBO>> getReceivablePayProve(UserLoginCacheDTO sysUser, Long id);

    /**
     * 获取应收款账款结算详情
     * @author 伍将
     * @date 2020/10/23
     * @param sysUser:
     * @param id:
     * @return com.ssy.lingxi.common.response.Wrapper<com.ssy.lingxi.settle.accounts.mode.vo.response.PlatformScoreSettlementDetailVO>
     **/
    Wrapper<PlatformScoreSettlementDetailVO> getReceivableDetail(UserLoginCacheDTO sysUser, Long id);

    /**
     * 分页查询应收款账款结算详情
     * @author 伍将
     * @date 2020/10/30
     * @param sysUser:
     * @param pageVO:
     * @return com.ssy.lingxi.common.response.Wrapper<com.ssy.lingxi.common.response.PageData < com.ssy.lingxi.settle.accounts.mode.vo.response.PagePlatformScoreSettlementDetailVO>>
     **/
    Wrapper<PageData<PagePlatformScoreSettlementDetailVO>> pageReceivableSettlementDetail(UserLoginCacheDTO sysUser, PlatformScoreSettlementDetailPageVO pageVO);

    /**
     * 分页查询应付账款结算
     * @author 伍将
     * @date 2020/10/29
     * @param sysUser:
     * @param pageVO:
     * @return com.ssy.lingxi.common.response.Wrapper<com.ssy.lingxi.common.response.PageData < com.ssy.lingxi.settle.accounts.mode.vo.response.PlatformScoreSettlementVO>>
     **/
    Wrapper<PageData<PlatformScoreSettlementVO>> pagePayableSettlement(UserLoginCacheDTO sysUser, PlatformScoreSettlementPageVO pageVO);

    /**
     * 付款
     * @author 伍将
     * @date 2020/10/29
     * @param sysUser:
     * @param payVO:
     * @return com.ssy.lingxi.common.response.Wrapper
     **/
    Wrapper<Void> pay(UserLoginCacheDTO sysUser, PayVO payVO);

    /**
     * 付款方查看凭证
     * @author 伍将
     * @date 2020/10/23
     * @param sysUser:
     * @param id:
     * @return com.ssy.lingxi.common.response.Wrapper<java.util.List < com.ssy.lingxi.settle.accounts.mode.bo.PayProveBO>>
     **/
    Wrapper<List<PayProveBO>> getPayablePayProve(UserLoginCacheDTO sysUser, Long id);

    /**
     * 获取应付账款结算详情
     * @author 伍将
     * @date 2020/10/29
     * @param sysUser:
     * @param id:
     * @return com.ssy.lingxi.common.response.Wrapper<com.ssy.lingxi.settle.accounts.mode.vo.response.MemberSettlementDetailVO>
     **/
    Wrapper<PlatformScoreSettlementDetailVO> getPayableDetail(UserLoginCacheDTO sysUser, Long id);

    /**
     * 分页查询应付款账款结算详情
     * @author 伍将
     * @date 2020/10/30
     * @param sysUser:
     * @param pageVO:
     * @return com.ssy.lingxi.common.response.Wrapper<com.ssy.lingxi.common.response.PageData < com.ssy.lingxi.settle.accounts.mode.vo.response.PagePlatformScoreSettlementDetailVO>>
     **/
    Wrapper<PageData<PagePlatformScoreSettlementDetailVO>> pagePayableSettlementDetail(UserLoginCacheDTO sysUser, PlatformScoreSettlementDetailPageVO pageVO);

    /**
     * 平台结算管理-积分结算-通联付款
     * @param sysUser 登录用户
     * @param payVO  通联付款VO
     * @return 付款结果
     */
    Wrapper<Void> allInPay(UserLoginCacheDTO sysUser, AllInPayVO payVO);

    /**
     * 平台结算管理-积分结算-付款方查看凭证
     * @param sysUser 登录用户
     * @param id 平台积分结算id
     * @return 付款方查看凭证
     */
    Wrapper<CommunicationPayProveVO> getAllInPayablePayProve(UserLoginCacheDTO sysUser, Long id);

    /**
     * 平台积分结算-分页查询积分结算明细-详情-查询明细导出
     * @param sysUser 登录用户
     * @param response 响应
     * @param queryParameter 查询条件
     */
    void receivableExport(UserLoginCacheDTO sysUser, HttpServletResponse response, PlatformScoreSettlementDetailPageVO queryParameter);

    /**
     * 平台结算管理-积分结算-详情-导出excel
     * @param sysUser 登录用户
     * @param response 响应
     * @param queryParameter 查询条件
     */
    void payableExport(UserLoginCacheDTO sysUser, HttpServletResponse response, PlatformScoreSettlementDetailPageVO queryParameter);

}
